package com.sjgl.esdn.mapper;

import com.sjgl.esdn.domain.entity.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 部门 数据层
 *
 * @author Administrator
 * @date 2022/08/05
 */
@Mapper
@Repository
@Component
public interface DeptMapper {

    /**
     * 获得部门名字
     *
     * @param deptId 部门id
     * @return {@link String}
     */
    public String getDeptName(@Param("deptId") Long deptId);

    /**
     * 获得id通过部门名字
     *
     * @param deptName 部门名称
     * @return {@code Long}
     */
    public Long getIdByDeptName(@Param("deptName") String deptName);

    /**
     * 检查部门唯一
     *
     * @param deptName 部门名称
     * @return boolean
     */
    public int checkDeptUnique(@Param("deptName") String deptName);

    /**
     * 获得id列表
     *
     * @return {@link List}<{@link Long}>
     */
    public List<Long> getIdList();

    /**
     * 获得部门名字列表
     *
     * @return {@link List}<{@link String}>
     */
    public List<String> getDeptNameList();

    /**
     * 根据ID查询所有子部门
     *
     * @param deptId 部门ID
     * @return 部门列表
     */
    public List<Dept> selectChildrenDeptById(Long deptId);

    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    public int selectNormalChildrenDeptById(Long deptId);

    /**
     * 是否存在子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int hasChildByDeptId(Long deptId);

    /**
     * 查询部门管理数据
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
    public List<Dept> selectDeptList(Dept dept);

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果
     */
    public int checkDeptExistUser(Long deptId);

    /**
     * 得到领导id
     *
     * @param deptId 部门id
     * @return {@code Long}
     */
    public Long getLeaderId(Long deptId);

    /**
     * 设置部门领导人
     *
     * @param deptId 部门id
     * @param userId 用户id
     */
    public void setDeptLeader(@Param("deptId") Long deptId,@Param("userId") Long userId);
}
